Be more explicit about when to flush moves
authorAlexander Larsson <alexl@redhat.com>
Thu, 5 Feb 2009 09:47:11 +0000 (10:47 +0100)
committerAlexander Larsson <alex@localhost.localdomain>
Thu, 2 Apr 2009 08:15:33 +0000 (10:15 +0200)
Also makes the non-doublebuffered case work better by flushing before we
call _gdk_windowing_window_process_updates_recurse.

gdk/gdkwindow.c

index 730c82e1b7274dfd5be4b9e41b841a0d7030f03a..6f381f24a853e06390245277befe8e4d9095dcc8 100644 (file)
@@ -2088,8 +2088,6 @@ gdk_window_end_implicit_paint (GdkWindow *window)
 
   private->implicit_paint = NULL;
 
-  gdk_window_flush_outstanding_moves (window);
-
   if (!gdk_region_empty (paint->region))
     {
       /* Some regions are valid, push these to window now */
@@ -4499,9 +4497,15 @@ gdk_window_process_updates_internal (GdkWindow *window)
 
          gdk_region_get_clipbox (expose_region, &clip_box);
          end_implicit = gdk_window_begin_implicit_paint (window, &clip_box);
+         if (end_implicit) /* rendering is not double buffered, do moves now */
+             gdk_window_flush_outstanding_moves (window);
          _gdk_windowing_window_process_updates_recurse (window, expose_region);
          if (end_implicit)
-           gdk_window_end_implicit_paint (window);
+           {
+             /* Do moves right before exposes are rendered */
+             gdk_window_flush_outstanding_moves (window);
+             gdk_window_end_implicit_paint (window);
+           }
          
          if (expose_region != update_area)
            gdk_region_destroy (expose_region);